home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 744 / fo2 / sources_fo2 / disk.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  3KB  |  142 lines

  1. #include "defs.h"
  2.  
  3. Prototype WaitChangeDisk(BYTE drive1,BYTE drive2);
  4. Prototype Change1D(BYTE drive);
  5. Prototype isBlocUsed(WORD    Bloc);
  6. Prototype HowBlockUsed(LONG *AdrBM);
  7. Prototype LoadBinMem();
  8. Prototype Buffer(LONG m);
  9.  
  10. WaitChangeDisk(drive1,drive2)
  11. BYTE drive1,drive2;
  12. {
  13. BYTE val;
  14. BYTE state1=-1,state2=-1;
  15. BYTE I1,I2,J1,J2;
  16. BYTE drive;
  17.  
  18.     val=0;
  19.     if (drive1 != (BYTE)-1) MtrOff(drive1);
  20.     if (drive2 != (BYTE)-1) MtrOff(drive2);
  21.  
  22.  
  23.     if (drive1==(BYTE)-1) return(Change1D(drive2));
  24.     if (drive2==(BYTE)-1) return(Change1D(drive1));
  25.  
  26.     putIText("Now change Disks (source & dest)    ");
  27.  
  28.     I1=I2=J1=J2=1;
  29.     while ( (state1 % 2) || (state2 % 2) || (!state1) || (!state2) )
  30.     {
  31.         if (isInserted(drive1))  { state1+=I1; I1=0; J1=1;}
  32.         else                     { state1+=J1; J1=0; I1=1;}
  33.         if (isInserted(drive2))  { state2+=I2; I2=0; J2=1;}
  34.         else                     { state2+=J2; J2=0; I2=1;}
  35.         val=HandleIDCMP2(FOWin);
  36.         if (val==2) return(2);
  37.         if (val==1) exit(0);
  38.         Delay(10);
  39.     }    
  40. }
  41.  
  42. Change1D(drive)
  43. BYTE drive;
  44. {
  45. BYTE val;
  46.  
  47.     putIText("Now change Disk (dest)              ");
  48.  
  49.     while (!isInserted(drive))
  50.     {
  51.         val=HandleIDCMP2(FOWin);
  52.         if (val==2) return(2);
  53.         if (val==1) exit(0);
  54.         Delay(10);
  55.     }
  56.  
  57.     while (isInserted(drive))
  58.     {
  59.         val=HandleIDCMP2(FOWin);
  60.         if (val==2) return(2);
  61.         if (val==1) exit(0);
  62.         Delay(10);
  63.     }
  64.     return(0);
  65. }
  66.  
  67. /*    isBlocUsed renvoie 1 si Block libre ou 0 si block occuppé 
  68.     il se réfère au BitMap    */
  69.  
  70.  
  71. isBlocUsed(Bloc)
  72. WORD    Bloc;
  73. {
  74. LONG    A,B;
  75.     if (Bloc==0 || Bloc==1) return(1); /* Faux car blocks used mais pratique ! */
  76.     A=*(BBM+1+(Bloc-2)/32);
  77.     B=(A>>(((Bloc-2)%32)) & 0x1L);
  78.     return(B);     
  79. }
  80.  
  81. HowBlockUsed(AdrBM)
  82. LONG *AdrBM;
  83. {
  84. WORD i,TotalBlocks=0;
  85.  
  86.     for (i=2;i<=1760;i++)
  87.     {
  88.     TotalBlocks+=(WORD)!(isBlocUsed(i));
  89.     }
  90.     return(TotalBlocks);
  91. }
  92.  
  93. LoadBinMem()
  94. {
  95. LONG    n,m=0;
  96. LONG    *buff1,*buff2,*inCHIP;
  97. struct  DiskList *dlist;
  98. BYTE     val;
  99.  
  100.     inCHIP=VarAdr->inCHIP;
  101.     putIText("Reading Source and preparing ...    ");
  102.     for (n=2;n<1760;n++)
  103.     {
  104.         if (isBlocUsed(n)==used) 
  105.         {
  106.             val=HandleIDCMP2(FOWin);
  107.             if (val)
  108.             {
  109.                 if (val==1) exit(0);
  110.                 if (val==2) return(2);
  111.             }
  112.             buff1=(LONG *)(Buffer(m++));
  113.             if (TypeOfMem(buff1)&MEMF_CHIP) buff2=buff1;
  114.             else buff2=inCHIP;
  115.             if (Read_WriteB(R,(LONG)sourceDrive,buff2,n)) 
  116.             {
  117.                 putIText("Read Error, can' t optimize        ");
  118.                 return(2);
  119.             }
  120.             if (buff2==inCHIP) CopyMemQuick(buff2,buff1,512L);
  121. #ifdef DEBUG
  122.     if (!Buffer(m-1))
  123.     {
  124.         puts("Problème avec LoadBinMem !");
  125.         exit(0);
  126.     }
  127. #endif
  128.         Organising(buff1,dlist,n);
  129.         }        
  130.         if ((n%22)==0) printCYL(n/22);
  131.         
  132.     }
  133.     return(0);    
  134. }
  135.  
  136. /*    Cherche et renvoie l' adresse oû ranger le bloc */
  137. Buffer(m)
  138. LONG m;
  139. {
  140.     return((*VarAdr->TableMem)[m]);
  141. }
  142.